import asyncio
import time

from watchdog.events import FileSystemEventHandler

"""
    监听文件夹变动的处理类
"""


class MyHandler(FileSystemEventHandler):
    def __init__(self, report):
        self.report = report
        self.cursor = None

    def on_modified(self, event):
        self.report.logger.info('文件被修改:{}'.format(event.src_path))

    def on_created(self, event):
        """
            判断当前新增的文件是否为图片,如果是,则去数据库中查询最新一条数据
        :param event:
        :return:
        """
        self.report.logger.info('文件被创建,路径:{}'.format(event.src_path))

        if event.src_path:
            type_str = event.src_path.split('.')[-1].lower()
            if type_str == 'jpeg' or type_str == 'jpg' or type_str == 'png':
                time.sleep(0.1)  # 这里暂停100ms,方式图片过大走回调时图片还没有完全保存好导致的无法读取
                if self.report.send_msg_loop is None:
                    self.report.send_msg_loop = asyncio.new_event_loop()
                coroutine = self.report.file_created_call_back(event.src_path)
                asyncio.set_event_loop(self.report.send_msg_loop)
                future = asyncio.gather(coroutine)
                self.report.send_msg_loop.run_until_complete(future)

        self.report.logger.info("文件{}被新增".format(event.src_path))
